package ioperations;

import book.Book;
import book.BookList;

import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 姚东名
 * Date: 2024-06-22
 * Time: 9:56
 */
public class DelOperation implements IOperation {
    @Override
    public void work(BookList bookList) {
        System.out.println("删除书籍：");

        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入你删除的书名：");
        String name = scanner.nextLine();
        int currentSize = bookList.getUsedSize();

        int pos = -1;
        //找到这本书
        int i = 0;
        for (; i < currentSize; i++) {
            Book book = bookList.getBook(i);
            if (book.getName().equals(name)) {
                pos = i;
                break;
            }
        }

        if (i == currentSize) {
            System.out.println("没有你要删除的书！");
            return;
        }

        //这里开始删除
        for (int j = pos; j < currentSize - 1; j++) {
            //bookList[j] = bookList[j+1];
            Book book = bookList.getBook(j + 1);

            bookList.setBook(j, book);
        }

        bookList.setBook(currentSize - 1, null);

        bookList.setUsedSize(currentSize - 1);
        System.out.println("删除成功！！！！");
    }
}

/*
这个`DelOperation`类实现了`IOperation`接口，并提供了`work`方法用于从`BookList`中删除指定的书籍。以下是该方法逻辑关系的简短分析：

1. **提示用户并接收输入**：
   - 输出提示信息，告知用户正在进行删除书籍操作。
   - 使用`Scanner`类接收用户输入的要删除的书名。

2. **查找要删除的书籍**：
   - 遍历书架上的书籍，查找与用户输入书名相匹配的书籍，并记录其位置`pos`。
   - 如果未找到匹配的书籍，则输出提示信息并结束方法。

3. **执行删除操作**：
   - 如果找到了要删除的书籍，从该书的位置开始，将后面的每一本书向前移动一个位置，覆盖掉要删除的书籍。
   - 将书架的最后一个位置设置为`null`，因为已经有一本书被“移除”了。
   - 更新书架的使用大小（`usedSize`），将其减少1。
   - 输出删除成功的提示信息。

简而言之，这个类的`work`方法实现了从书架中删除指定书籍的功能，通过用户输入的书名来查找并删除书籍，同时在未找到书籍时给出相应的提示。删除操作是通过将后面的书籍向前移动来覆盖要删除的书籍，并更新书架的使用大小。
 */